#include "create_image.h"
#include <iostream>

namespace qbe::utils::TempRender {

CreateImage::CreateImage() {}

CreateImage::~CreateImage() {}

// 将 vsg::ref_ptr<vsg::Data> 转换为 QImage
QImage CreateImage::vsgDataToQImage(const vsg::ref_ptr<vsg::Data>& data) {
  // 检查数据是否有效
  if (!data) {
    std::cerr << "Invalid vsg::Data pointer." << std::endl;
    return QImage();
  }

  // 获取图像的宽度、高度和格式
  uint32_t width = data->width();
  uint32_t height = data->height();
  //VkFormat format = data->format();

  //// 目前仅处理常见的 RGBA8_UNORM 格式
  //if (format != VK_FORMAT_R8G8B8A8_UNORM) {
  //  std::cerr << "Unsupported format: " << format << std::endl;
  //  return QImage();
  //}

  // 创建 QImage 对象
  QImage qImage(width, height, QImage::Format_RGBA8888);

  // 获取 vsg::Data 的数据指针
  const uint8_t* vsgDataPtr = static_cast<const uint8_t*>(data->dataPointer());

  // 复制数据到 QImage
  for (uint32_t y = 0; y < height; ++y) {
    for (uint32_t x = 0; x < width; ++x) {
      uint32_t index = (y * width + x) * 4;  // 每个像素 4 个字节（RGBA）
      uint8_t r = vsgDataPtr[index];
      uint8_t g = vsgDataPtr[index + 1];
      uint8_t b = vsgDataPtr[index + 2];
      uint8_t a = vsgDataPtr[index + 3];
      qImage.setPixelColor((width - x - 1), y, QColor(r, g, b, a));
    }
  }

  return qImage;
}

}  // namespace qbe::utils::TempRender